package cn.vehicle.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import cn.vehicle.domains.entity.SysUserRoleEntity;
import cn.vehicle.mapper.SysUserRoleMapper;
import cn.vehicle.service.SysUserRoleService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 用户角色关系服务实现类
 * <p>
 * 负责用户与角色关联关系的维护操作，包括新增、批量插入与删除。
 * 通过 {@link SysUserRoleMapper} 实现与数据库的交互，是用户角色管理的核心逻辑层。
 * </p>
 *
 * <p>主要职责：</p>
 * <ul>
 *   <li>在用户角色更新时，删除旧的角色绑定并批量新增新的角色关系；</li>
 *   <li>保证操作原子性，使用事务机制防止部分更新；</li>
 *   <li>为业务层（Biz 层）提供用户角色绑定的基础服务支持。</li>
 * </ul>
 */
@Service
public class SysUserRoleServiceImpl implements SysUserRoleService {

    @Resource
    private SysUserRoleMapper sysUserRoleMapper;

    /**
     * 新增或更新用户角色关联关系
     * <p>先删除用户原有角色，再批量插入新的角色绑定。</p>
     *
     * @param userId 用户主键ID
     * @param list 用户角色关系列表
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addUserRoles(Long userId, List<SysUserRoleEntity> list) {
        // 删除用户原有角色关系，防止重复绑定
        sysUserRoleMapper.deleteRolesByUserId(userId);

        // 若新角色列表非空，则批量插入新的角色关联数据
        if (CollectionUtil.isNotEmpty(list)) {
            // 批量执行插入操作，提高数据库写入效率
            sysUserRoleMapper.batchInsertUserRoles(list);
        }
    }
}
